home *** CD-ROM | disk | FTP | other *** search
/ westlife Cardz: Kian / westlife: Kian.iso / pc / slide.dxr / Internal_1_Sliding Puzzle Frame Behavior.ls < prev    next >
Encoding:
Text File  |  2000-10-23  |  2.8 KB  |  106 lines

  1. property pFirstSprite, pLastSprite, pOpenSpot, pGameOverFrame, pSlideSound, pPieceWidth, pPieceHeight, pUpperLeftLoc, pMode, completo
  2.  
  3. on getPropertyDescriptionList me
  4.   list = [:]
  5.   addProp(list, #pFirstSprite, [#comment: "First Sprite", #format: #integer, #default: 11])
  6.   addProp(list, #pLastSprite, [#comment: "Last Sprite", #format: #integer, #default: 25])
  7.   addProp(list, #pOpenSpot, [#comment: "Open Spot (point(x,y))", #format: #point, #default: point(4, 4)])
  8.   addProp(list, #pSlideSound, [#comment: "Slide Sound", #format: #string, #default: EMPTY])
  9.   addProp(list, #pGameOverFrame, [#comment: "Game Over Frame", #format: #marker, #default: #next])
  10.   return list
  11. end
  12.  
  13. on beginSprite me
  14.   completo = 0
  15.   pPieceWidth = sprite(pFirstSprite).width
  16.   pPieceHeight = sprite(pFirstSprite).height
  17.   pUpperLeftLoc = sprite(pFirstSprite).loc
  18.   pMode = #normal
  19.   randomizePieces(me)
  20. end
  21.  
  22. on randomizePieces me
  23.   posList = []
  24.   repeat with s = pFirstSprite to pLastSprite
  25.     add(posList, sprite(s).loc)
  26.   end repeat
  27.   repeat with s = pFirstSprite to pLastSprite
  28.     r = random(posList.count)
  29.     sprite(s).loc = posList[r]
  30.     deleteAt(posList, r)
  31.   end repeat
  32. end
  33.  
  34. on clickPuzzle me, spriteNumber
  35.   if pMode <> #normal then
  36.     exit
  37.   end if
  38.   X = ((sprite(spriteNumber).locH - pUpperLeftLoc.locH) / pPieceWidth) + 1
  39.   Y = ((sprite(spriteNumber).locV - pUpperLeftLoc.locV) / pPieceHeight) + 1
  40.   if pOpenSpot.locV = Y then
  41.     if pOpenSpot.locH = (X - 1) then
  42.       move(me, spriteNumber, -1, 0)
  43.     else
  44.       if pOpenSpot.locH = (X + 1) then
  45.         move(me, spriteNumber, 1, 0)
  46.       end if
  47.     end if
  48.   else
  49.     if pOpenSpot.locH = X then
  50.       if pOpenSpot.locV = (Y - 1) then
  51.         move(me, spriteNumber, 0, -1)
  52.       else
  53.         if pOpenSpot.locV = (Y + 1) then
  54.           move(me, spriteNumber, 0, 1)
  55.         end if
  56.       end if
  57.     end if
  58.   end if
  59. end
  60.  
  61. on move me, spriteNumber, dx, dy
  62.   newLoc = sprite(spriteNumber).loc + point(dx * pPieceWidth, dy * pPieceHeight)
  63.   pOpenSpot = pOpenSpot - point(dx, dy)
  64.   sendSprite(spriteNumber, #changeLoc, newLoc)
  65.   if pSlideSound <> EMPTY then
  66.     puppetSound(pSlideSound)
  67.   end if
  68.   pMode = #animate
  69. end
  70.  
  71. on resetMode me
  72.   pMode = #normal
  73.   if checkForGameOver(me) then
  74.     member("congrats").text = "Complete!"
  75.   end if
  76. end
  77.  
  78. on checkForGameOver me
  79.   prevLoc = sprite(pFirstSprite).loc
  80.   repeat with i = pFirstSprite + 1 to pLastSprite
  81.     nextLoc = sprite(i).loc
  82.     if nextLoc.locH <> (prevLoc.locH + pPieceWidth) then
  83.       if (nextLoc.locV <> (prevLoc.locV + pPieceHeight)) or (nextLoc.locH <> pUpperLeftLoc.locH) then
  84.         return 0
  85.       end if
  86.     end if
  87.     prevLoc = nextLoc
  88.   end repeat
  89.   completo = 1
  90.   return 1
  91. end
  92.  
  93. on exitFrame
  94.   sprite(29).visible = 0
  95.   if sprite(30).rollover = 1 then
  96.     sprite(29).visible = 1
  97.   else
  98.     sprite(29).visible = 0
  99.   end if
  100.   if completo = 1 then
  101.     go("Game Over")
  102.   else
  103.     go(the frame)
  104.   end if
  105. end
  106.